<!DOCTYPE html>
<html>
<head>
	<title></title>
	<link rel="stylesheet" type="text/css" href="../公用CSS文件/all.css" />
	<meta charset="utf-8">
	<script type="text/javascript" src="../js/jquery.min.js"></script> 	<script type="text/javascript" src="../js/js.js"></script>
	<style type="text/css">
		.nomar td{padding-right: 10px}
	</style>	
</head>
<body>

<div class="dt">vi编辑器常用操作</div>
<ul>
	<div class="ltable showimg">vi编辑器有三种模式</div>
	<table class="img">
		<tr>
			<th>模式</th><th>实际</th><th>开启</th>
		</tr>
		<tr>
			<td>编辑模式</td><td>使用类似快捷操作一样的命令进行编辑操作</td><td>进入vi编辑默认开启或由其他两种模式倒退</td>
		</tr>
		<tr>
			<td>输入模式</td><td>以类似快捷键一样的操作指定一个光标位置然后输入内容</td><td>由编辑模式进入(输入模式依然可以移动光标位置)</td>
		</tr>
		<tr>
			<td>末行模式</td><td>弹出命令输入接口，进行命令操作</td><td>由编辑模式进入</td>
		</tr>
	</table>

	<div class="ltable showimg">编辑模式下的操作</div>
	<table class="img">
		<tr>
			<th>命令</th><th>作用</th>
		</tr>
		<tr>
			<td>↑→↓←和Enter</td><td>移动光标，可以和数字组合</td>
		</tr>
		<tr>
			<td>数字dd</td><td>删除当前光标所在指定数目行数，不指定行数默认为1</td>
		</tr>
		<tr>
			<td>数字x</td><td>从光标所在处向后删除指定字符数内容，不指定个数为1个</td>
		</tr>
		<tr>
			<td>数字yy</td><td>复制当前光标所在指定数目行数，不指定默认为1</td>
		</tr>
		<tr>
			<td>p</td><td>复制到当前光标处</td>
		</tr>
		<tr>
			<td><span class="spe">:</span></td><td>进入末行模式，弹出命令输入窗口</td>
		</tr>
		<tr>
			<td>u</td><td>撤销上一次操作</td>
		</tr>
		<tr>
			<td>G</td><td>光标切换到最后一行</td>
		</tr>
	</table>
	
	<div class="ltable showimg">编辑模式与输入模式切换</div>
	<table class="img">
		<tr>
			<td>i</td><td>当前光标的前面输入内容</td>
		</tr>
		<tr>
			<td>I</td><td>在当前光标行首输入内容</td>
		</tr>
		<tr>
			<td>a</td><td>在当前光标的后面输入内容</td>
		</tr>
		<tr>
			<td>A</td><td>在当前光标所在处的行尾输入内容</td>
		</tr>
		<tr>
			<td>o</td><td>在当前光标所在处的前面新增一行输入内容</td>
		</tr>
		<tr>
			<td>O</td><td>在当前光标所在处的后面新增一行输入内容</td>
		</tr>
		<tr>
			<td>r</td><td>在当前光标处输入内容，会覆盖原来的字符</td>
		</tr>
		<tr>
			<td>ESC</td><td>从输入模式倒退回编辑模式</td>
		</tr>
	</table>

	<div class="ltable showimg">末行模式操作</div>
	<table class="img">
		<tr>
			<th>命令</th><th>作用</th>
		</tr>
		<tr>
			<td>set nu</td><td>vi界面左侧显示行数，退出末行模式依然存在</td>
		</tr>
		<tr>
			<td>set nonu</td><td>取消行数显示</td>
		</tr>
		<tr>
			<td>syntax on/off</td><td>开启/关闭高亮</td>
		</tr>
		<tr>
			<td>1，20d</td><td>删除1到20行</td>
		</tr>
		<tr>
			<td>1，+20d</td><td>从第一行开始，删除20行</td>
		</tr>
		<tr>
			<td>1</td><td>光标移动到第1行</td>
		</tr>
		<tr>
			<td>+1</td><td>光标移动到下面1行（-就是上面 ）</td>
		</tr>
		<tr>
			<td>ESC ESC</td><td>退出末行模式</td>
		</tr>
	</table>

	<div class="ltable showimg">特殊字符</div>
	<table class="img">
		<tr>
			<th>字符</th><th>意义</th>
		</tr>
		<tr>
			<td>%</td><td>替代任意行数</td>
		</tr>
		<tr>
			<td>.</td><td>匹配当前行数</td>
		</tr>
		<tr>
			<td>$</td><td>匹配最后一行</td>
		</tr>
	</table>

	<div class="ltable showimg">VI编辑器退出、撤销、保存命令</div>
	<table class="img">
		<tr>
			<th>操作</th><th>意义</th>
		</tr>
		<tr>
			<td>末行模式输入q!</td><td>强制退出，不保存修改</td>
		</tr>
		<tr>
			<td>末行模式输入wq</td><td>保存修改并退出</td>
		</tr>
		<tr>
			<td>末行模式输入w</td><td>保存</td>
		</tr>
		<tr>
			<td>末行模式输入q</td><td>退出</td>
		</tr>
		<tr>
			<td>末行模式输入x</td><td>保存并退出</td>
		</tr>
		<tr>
			<td>末行模式ESC ESC</td><td>退出末行模式</td>
		</tr>
		<tr>
			<td>末行模式下输入u</td><td>撤销上一次操作</td>
		</tr>
		<tr>
			<td>编辑模式下ZZ</td><td>保存退出</td>
		</tr>
		<tr>
			<td>编辑模式下u</td><td>撤销上一次操作</td>
		</tr>
		<tr>
			<td>输入模式下ESC</td><td>退出输入模式，返回到编辑模式</td>
		</tr>
	</table>

	<div class="ltable showimg">多文件操作（需要进入末尾命令模式）</div>
 
	<table class="img">
		<tr>
			<th>命令</th><th>意义</th>
		</tr>
		<tr>
			<td>next</td><td>下一个文件</td>
		</tr>
		<tr>
			<td>prev</td><td>上一个文件</td>
		</tr>
		<tr>
			<td>first</td><td>第一个文件</td>
		</tr>
		<tr>
			<td>qall</td><td>退出所有文件</td>
		</tr>
		<tr>
			<td>wqall</td><td>退出并保存所有文件</td>
		</tr>
		<tr>
			<td>-o</td><td>水平并排打开多个文件</td>
		</tr>
		<tr>
			<td>-O</td><td>垂直堆叠打开多个文件</td>
		</tr>
	</table>
</ul>
<div class="dt">更多VIM编辑器操作</div>
<ul>
	<li><a href="vim编辑器.pdf">VIM操作大全</a></li>
</ul>
<div class="dt">bash shell编程语法</div>
<ul>
	<div class="ltable showimg">shell编程语法基本元素</div>
	<table class="img">
		<tr>
			<th>元素</th><th>组成</th><th>意义</th>
		</tr>
		<tr>
			<td>变量</td><td>"$"符号加变量名，但声明时和php不同</td><td>类同大多数编程语言，用来封装数据</td>
		</tr>
		<tr>
			<td>数据</td><td>普通的ascii码和其组成的数组两种</td><td>主要为shell内置指令提供数据的参数，让计算机知道如何执行命令</td>
		</tr>
		<tr>
			<td>表达式</td><td>人类容易理解同时被解析后可被计算机理解的一串特定字符</td><td>简化对计算机运作的操作，和大多数编程语言一致</td>
		</tr>
		<tr>
			<td>流程控制语句</td><td>if、switch等语句</td><td>操纵普通语句（表达式）的执行与否和执行顺序</td>
		</tr>
	</table>
	<li class="fu">shell的数组很简单，功能也比较小，是由"{}"包裹的一堆字符，{1..50}为1到50的所有数，包含边界值，其实更好的叫法应该是集合，而通常编程语言的正规数组设计，bash shell使用.了文件的每行代替数组的功能</li>
</ul>
<div class="dt">变量的使用</div>
<ul>
	<div class="ltable showimg">变量声明</div>
	<table class="img">
		<tr>
			<th>操作</th><th>示范</th><th>说明</th>
		</tr>
		<tr>
			<td>声明本地变量</td><td>a=1</td><td>作用域为整个bash进程，对子shell以及其他shell都无效</td>
		</tr>
		<tr>
			<td>声明局部变量</td><td>local a=1</td><td>作用域为当前语句</td>
		</tr>
		<tr>
			<td>声明环境变量</td><td>export a=1</td><td>作用域为当前shell进程和其子进程</td>
		</tr>
		
	</table>
	<li class="fu">说明：在赋值符号的右边类似于php用双引号引起来的字符串，会解析变量，但在里面写运算符会作为字符对待</li>
	<div class="ltable showimg">变量运算</div>
	<table class="img">
		<tr>
			<th>变量运算</th><th>示范</th><th>说明</th>
		</tr>
		<tr>
			<td>变量累运算</td><td>let a*=1（let表达式不能有任何空格）</td><td>shell中可以没有初始值，此时值为0，右边的表达式会进行运算</td>
		</tr>
		<tr>
			<td>表达式进行运算①</td><td>a=$((1+1))</td><td>普通的声明会把右边当成纯字符（仍支持转义符），而该类声明会进行运算</td>
		</tr>
		<tr>
			<td>表达式进行运算②</td><td>a=$[1+1]</td><td>和上面一致</td>
		</tr>
		<tr>
			<td>表达式进行运算③</td><td>a=`expr $b+$c`</td><td>该表达式仅支持变量运算，不是变量运算符会识别为字符，不好使</td>
		</tr>
	</table>
	

	<div class="ltable showimg">特殊变量</div>
	<table class="img">
		<tr>
			<th>特殊变量</th><th>意义</th>
		</tr>
		<tr>
			<td>$数字</td><td>在脚本中使用，指向调用该脚本传递的指定参数，$0指向当前脚本，直接echo输出$0会打印-bash</td>
		</tr>
		<tr>
			<td>$?</td><td>上一条命令的执行状态，0表示成功，1-255为失败，也可能是函数的返回值</td>
		</tr>
		<tr>
			<td>$$</td><td>当前进程id，echo是使用了bash，为-bash的进程id</td>
		</tr>
		<tr>
			<td>$#</td><td>传递给脚本或函数的参数个数</td>
		</tr>
		<tr>
			<td>$*</td><td>传递给脚本或函数的所有参数</td>
		</tr>
		<tr>
			<td>$!</td><td>最后一个执行的进程的id</td>
		</tr>
	</table>

	
</ul>
<div class="dt">运算符</div>
<ul>
	<table>
		<tr>
			<th>符号</th><th>意义</th>
		</tr>
		<tr>
			<td>+ - * / %</td><td>常规意义，由于bash shell的用途让浮点数失去意义，所以bash在设计中仅支持整形数值，除法运算会舍弃小数取整</td>
		</tr>
		<tr>
			<td>-= += /= %= *= ++ --</td><td>和大多数编程语言一样</td>
		</tr>
		<tr>
			<td>-lt</td><td> &lt;</td>
		</tr>
		<tr>
			<td>-gt</td><td>&gt;</td>
		</tr>
		<tr>
			<td>-eq</td><td>==，唯一支持通用编程运算符号的，等同于"=="</td>
		</tr>
		<tr>
			<td>-le</td><td>&lt;=</td>
		</tr>
		<tr>
			<td>-ge</td><td>&gt;=</td>
		</tr>
	</table>
	<li class="fu">备注：bash shell仅支持"=="比较运算符，其他的比较运算符会作为普通字符对待，只能使用bash shell自己的运算符</li>
</ul>
<div class="dt">bash shell脚本调用</div>
<ul>
	<table>
		<tr>
			<th>命令</th><th>作用</th>
		</tr>
		<tr>
			<td>bash -n 脚本路径</td><td>检查该脚本是否有语法错误</td>
		</tr>
		<tr>
			<td>bash 脚本路径</td><td>执行脚本</td>
		</tr>
		<tr>
			<td>脚本路径</td><td>执行脚本，该命令需要脚本文件的执行权</td>
		</tr>
	
	</table>
</ul>	
<div class="dt">重定向操作和echo命令</div>
<ul>
	<div class="ltable showimg">重定向操作就是不使用编辑工具直接用shell特定指令和文件交互数据</div>
	<table class="img">
		<tr>
			<th>命令</th><th>作用</th>
		</tr>
		<tr>
			<td>bash指令 < 文件路径</td><td>将文件里面的数据输入，似乎只能输入交互式脚本或命令(输入重定向)</td>
		</tr>
		<tr>
			<td>echo 数据 > 文件路径</td><td>将数据输入至一个文件，在输入之前会清空文件数据(输出重定向)</td>
		</tr>
		<tr>
			<td>echo 数据 >> 文件路径 </td><td>尾部空一行输入至文件(输出重定向)</td>
		</tr>
		<tr>
			<td>cat >> 文件路径</td><td>往文件末尾空行输入数据，回车再输入可输入多行，Ctrl+D保存</td>
		</tr>
		<tr>
			<td>cat > 文件路径</td><td>往文件输入数据，在输出之前会先清空文件</td>
		</tr>
		<tr>
			<td>任意会输入数据的命令 > /dev/null </td><td>使数据输出无效化</td>
		</tr>
	</table>
	<li class="fu">附注信息：cat和echo输入数据到文件都可以链式操作，cat输出到的文件如果不存在也会创建文件</li>

	<div class="ltable showimg">echo命令详解</div>
	<table class="img">
		<tr>
			<th>示例</th><th>作用</th>
		</tr>
		<tr>
			<td>echo -n 1</td><td>输出时不换行</td>
		</tr>
		<tr>
			<td>echo -e "1\n1"</td><td>输出时可以插入转义（\n为转义换行符，\t为制表符）</td>
		</tr>
	</table>
	<div style="height: 10px"></div>
</ul>
<div class="dt">流程控制语句</div>
<ul>
	<div class="ltable showimg">if判断语句</div>
	<div class="img"><img src="img/if语句.png"></div>

	<div class="ltable showimg">if else语句</div>
	<div class="img"><img src="img/if else语句.png"></div>

	<div class="ltable showimg">for循环</div>
	<div class="img"><img src="img/for语句.png"></div>

	<div class="ltable showimg">while循环语句（相当于switch语句）</div>
	<div class="img"><img src="img/while语句.png"></div>

	<div class="ltable showimg">case语句（相当于switch语句）</div>
	<div class="img"><img src="img/case语句.png"></div>
</ul>
<div class="dt">交互式脚本</div>
<ul>
	<img src="img/交互式脚本.png">
</ul>
<div class="dt">条件判断</div>
<ul>
	<div class="ltable showimg">条件判断有三种方式</div>
	<div class="img">
		<img src="img/条件判断表达式.png">
	</div>

	<div class="ltable showimg">文件判断语句</div>
	<table class="img">
		<tr>
			<th>范式</th><th>意义</th>
		</tr>
		<tr>
			<td>-d 路径</td><td>测试是否为目录</td>
		</tr>
		<tr>
			<td>-e 路径</td><td>测试是否存在此目录或文件（e，exist）</td>
		</tr>
		<tr>
			<td>-f 路径</td><td>测试是否为文件</td>
		</tr>
		<tr>
			<td>-r 路径</td><td>测试当前用户是否拥有读取该文件或目录的权限</td>
		</tr>
		<tr>
			<td>-w 路径</td><td>测试是当前用户是否拥有该文件或目录的写入权限</td>
		</tr>
		<tr>
			<td>-x 路径</td><td>测试当前用户是否拥有该目录或文件的执行权限
			</td>
		</tr>
		<tr>
			<td>-s 路径</td><td>测试文件是否是空的，若为非空文件，则为真</td>
		</tr>
	</table>

	<div class="ltable showimg">其他文件测试</div>
	<div class="img"><img src="img/文件测试.png"></div>


	<li class="fu">bash shell 编程中条件判断支持逻辑与或非</li>
</ul>
<div class="dt">bash shell脚本的应用场景</div>
<ul>
	<img src="img/bash脚本的应用场景.png">
</ul>
</body>
</html>




